package com.thb.pay.channel;

import com.thb.pay.api.order.vo.req.PayOrderReq;

/**
 * @Description 支付接口
 * @Author lucky
 * @data 2019/10/16 21:33
 */
public interface IPaymentService {

    /**
     * @param payOrder:支付订单信息
     * @return
     * @方法名称 payOrder
     * @功能描述 发起支付订单
     * @作者: lucky
     * @创建时间: 10:25 2019/10/24
     **/
    Object payOrder(PayOrderReq payOrder);

    /**
     * @param payOrder:支付订单信息
     * @return
     * @方法名称 cancelOrder
     * @功能描述 取消支付订单
     * @作者: lucky
     * @创建时间: 10:25 2019/10/24
     **/
    Object cancelOrder(PayOrderReq payOrder);

    /**
     * @param payOrder:支付订单信息
     * @return
     * @方法名称 queryOrder
     * @功能描述 查询支付订单
     * @作者: lucky
     * @创建时间: 10:25 2019/10/24
     **/
    Object queryOrder(PayOrderReq payOrder);

    /**
     * @param payOrder:支付订单信息
     * @return
     * @方法名称 generateOrderNumber
     * @功能描述 对应的支付通道有硬性要求：订单号根据第三方提供的格式规范生成
     * @作者: lucky
     * @创建时间: 10:25 2019/10/24
     **/
    Object generateOrderNumber(PayOrderReq payOrder);

    /**
     * @param payOrder:支付订单信息
     * @return
     * @方法名称 currencyExchange
     * @功能描述 货币金额转化[针对国际货币汇率互相转化问题, 发起支付跟通道支持的货币汇率转化]
     * @作者: lucky
     * @创建时间: 10:25 2019/10/24
     **/
    Object currencyExchange(PayOrderReq payOrder);

    /**
     * 获取三方支付配置信息
     * 如果是平台账户,则使用平台对应的配置,否则使用商户自己配置的渠道
     *
     * @param payOrder
     * @return
     */
    /**
     * @param payOrder:支付订单信息
     * @return
     * @方法名称 getThirdPayConfig
     * @功能描述 获取三方支付信息配置[]
     * @作者: lucky
     * @创建时间: 10:25 2019/10/24
     **/
    String getThirdPayConfig(PayOrderReq payOrder);

    /**
     * @param extra: 业务特殊参数内容 [根据不同的通道有不同的参数约束要求][微信公众号：appID非空、账户余额：userId 非空]
     * @方法名称 checkExtra
     * @功能描述 检查参数规则约束
     * @作者: lucky
     * @创建时间: 15:30 2019/10/25
     **/
    String checkExtra(String extra);
}
